package br.ufpe.cin.rgms.base.membro.controller;

import java.util.List;

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
#if($linhaPesquisa)
import br.ufpe.cin.rgms.base.linhapesquisa.dao.LinhaPesquisaDAO;
#end
import br.ufpe.cin.rgms.base.membro.dao.MembroDAO;
import br.ufpe.cin.rgms.base.membro.model.Membro;

@Resource
public class MembroController {

	private MembroDAO dao;
	#if($linhaPesquisa)
	private LinhaPesquisaDAO linhaDAO;
	#end
	
	private Result result;
	private Validator validator;

	public MembroController(MembroDAO dao,
							#if($linhaPesquisa)
							LinhaPesquisaDAO linhaDAO,
							#end
							Result result, Validator validator) {
		this.dao = dao;
		this.result = result;
		this.validator = validator;
		#if($linhaPesquisa)
		this.linhaDAO = linhaDAO;
		#end
	}

	public List<Membro> index(Membro membro) {
		List<Membro> membros = null;
		
		membros = dao.findAllByFilter(membro);
		if (membros.isEmpty()) {
			result.include("mensagem", "membro_nao_nencontrado");
		}
		return membros;
	}
	
	public void form() {
		#if($linhaPesquisa)
		result.include("linhaPesquisaList", linhaDAO.findAll());
		#end
	}
	
	private void validaCamposObrigatorios(Membro membro){
		if (membro.getNome().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_nome_branco"));
		}
		if (membro.getSobrenome().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_sobrenome_branco"));
		}
		if (membro.getUniversidade().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_universidade_branco"));
		}
		if (membro.getDepartamento().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_departamento_branco"));
		}
		if (membro.getEmail().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_email_branco"));
		}
		if (membro.getWebsite().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_website_branco"));
		}
		if (membro.getTelefone().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_telefone_branco"));
		}
		if (membro.getCidade().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_cidade_branco"));
		}
		if (membro.getPais().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_pais_branco"));
		}
		if (membro.getSenha().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_senha_branco"));
		}
		if (membro.getConfirmacao().isEmpty()) {
			validator.add(new ValidationMessage("erro", "membro_confirmacaoSenha_branco"));
		}
	}

	public void adiciona(final Membro membro) {
		if (membro != null) {			
			validaCamposObrigatorios(membro);			
			validator.onErrorUsePageOf(this).form();
			
			dao.salva(membro);
			result.include("mensagem", "membro_inserido");
			result.redirectTo(this).index(null);
		}
	}

	public Membro detalhe(Integer id) {
		return dao.carrega(id);
	}

	public void remove(Membro membro) {
		if (membro != null) {
			membro = dao.carrega(membro.getId());
			dao.delete(membro);
			result.include("mensagem", "membro_excluido");
		}

		result.redirectTo(this).index(null);
	}

	public Membro edita(Membro membro) {
		#if($linhaPesquisa)
		result.include("linhaPesquisaList", linhaDAO.findAll());
		#end
		return dao.carrega(membro.getId());
	}

	public void altera(Membro membro) {
		validaCamposObrigatorios(membro);			
		validator.onErrorUsePageOf(this).edita(membro);
		
		dao.altera(membro);
		result.include("mensagem", "membro_alterado");
		result.redirectTo(this).index(null);
	}
}
